package com.wxh.utils;

import java.math.BigDecimal;
import java.text.NumberFormat;

/**
 * @ClassName: DoubleUtils
 * @Description: double工具类
 * @Author wxh
 * @Date: 2019/8/2 17:50
 * @Version V1.0.0
 * @Since 1.8
 */
public class DoubleUtils {

    private DoubleUtils(){

    }

    /**
     * 两个Double数相加
     * @param d1 参数1
     * @param d2 参数2
     * @return Double
     */
    public static Double add(Double d1, Double d2){
        BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
        BigDecimal bd2 = BigDecimal.valueOf(d2.doubleValue());
        return new Double(bd1.add(bd2).doubleValue());
    }

    /**
     * 两个Double数相减
     * @param d1 参数1
     * @param d2 参数2
     * @return Double
     */
    public static Double sub(Double d1, Double d2){
        BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
        BigDecimal bd2 = BigDecimal.valueOf(d2.doubleValue());
        return new Double(bd1.subtract(bd2).doubleValue());
    }

    /**
     * 两个Double数相乘
     * @param d1 参数1
     * @param d2 参数2
     * @return Double
     */
    public static Double mul(Double d1,Double d2){
        BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
        BigDecimal bd2 = BigDecimal.valueOf(d2.doubleValue());
        return new Double(bd1.multiply(bd2).doubleValue());
    }

    /**
     * 两个Double数相乘
     * @param d1 参数1
     * @param d2 参数2
     * @param scale 保留小数点位数
     * @return Double
     */
    public static Double div(Double d1,Double d2, int scale){
        BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
        BigDecimal bd2 = BigDecimal.valueOf(d2.doubleValue());
        return new Double(bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue());
    }

    /**
     * 将Double转化为百分比
     * @param d 参数d
     * @return String 字符串
     */
    public static String double2String(Double d){
        NumberFormat format = NumberFormat.getPercentInstance();
        format.setMinimumFractionDigits(2);
        return format.format(d);
    }

    /**
     * 保留两位小数,进行四舍五入
     * @param d 参数
     * @return Double
     */
    public static Double retainTwoDecimal(Double d){
        BigDecimal bd = BigDecimal.valueOf(d.doubleValue());
        return new Double(bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
    }

}
